iT邦幫忙

2025 iThome 鐵人賽

DAY 4
1
Modern Web

Golang x Echo 30 天:零基礎GO , 後端入門系列 第 4

Echo 路由設計與參數處理:像在速食店點餐一樣簡單

  • 分享至 

  • xImage
  •  

Echo 路由設計與參數處理:像在速食店點餐一樣簡單

之前我們已經把 Go 跟 Echo 搞定,算是把店開起來了。
你可以想像:我們的程式就像一間速食店,Echo 就是店員,負責聽客人點單,再把單子送到廚房(也就是程式邏輯)。

今天要升級的技能是「路由設計」和「參數處理」。
聽起來好像很硬,但其實就像點餐一樣簡單!


為什麼要設計路由?

路由(Route)就是「規則」,決定客人(使用者)說的話,要送到哪個廚房(Handler)處理。

就像你去麥當勞說:「我要大麥克套餐!」
店員就會知道:

  • 大麥克套餐 → 廚房漢堡組
  • 再加薯條 → 去炸物組

如果沒有路由,客人隨便喊:「來一份雞排珍珠奶茶加牛肉捲!」
整個店一定亂掉。

https://ithelp.ithome.com.tw/upload/images/20250918/20178818eBFoOIRBoK.png


路由群組:像菜單一樣分區

速食店的菜單一定會分區:
🍔 漢堡區

🍟 炸物區

🥤 飲料區

🍦 甜點區

網站也是一樣。你不會想把「登入」、「看商品」、「下訂單」全部亂糟糟放一起吧?

在 Echo 裡,我們可以用 路由群組 (Router Groups) 來分區。

範例

e := echo.New()

// 建立一個 "/api/v1" 的群組
v1 := e.Group("/api/v1")

v1.GET("/users", handlerForUsers)        // 查使用者
v1.POST("/products", handlerForProducts) // 新增產品

// 群組再細分
auth := v1.Group("/auth")
auth.POST("/login", handlerForLogin)

這樣 /api/v1 就像「菜單版本一」的專區,裡面再分「使用者」、「產品」、「登入」。
整齊乾淨,日後想改也超方便。


路由參數:你要哪個漢堡?

你走到櫃檯說:「我要 123 號套餐!」
店員就知道該拿哪一份。

這在程式世界,就是 路由參數。

e.GET("/users/:id", func(c echo.Context) error {
    userID := c.Param("id") // 拿到 123
    return c.String("User ID: " + userID)
})

網址 /users/123 → Echo 自動抓到 id=123。
這就像店員聽懂了你要的號碼餐。


三種參數的差別

參數不只一種,常見的有三種:

1. 路徑參數 (Path Parameters)

像 /users/:id,要明確指出「我要哪個」。
→ 就像說:「給我 123 號套餐」。

2. 查詢參數 (Query Parameters)

就是網址後面加 ?,像:
/products?category=electronics&sort=price

category := c.QueryParam("category") // electronics
sort := c.QueryParam("sort")         // price

這就像對店員說:「我要飲料,但要大杯、去冰。」

3. 請求體參數 (Request Body)

這通常用在 POST,就像填一張單子給店員。

type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}

e.POST("/users", func(c echo.Context) error {
    u := new(User)
    if err := c.Bind(u); err != nil {
        return err
    }
    return c.JSON(http.StatusOK, u)
})

就像寫單子:
「名字:Jeff,Email:jeff@example.com
店員拿到後照單處理。


請求驗證:不要亂點餐!

想像你去點:「咖啡,不要洋蔥。」
店員一定黑人問號。

這時候就需要 驗證 (Validation),避免亂七八糟的點單進到廚房。

type User struct {
    Name  string `json:"name" validate:"required"`
    Email string `json:"email" validate:"required,email"`
    Age   int    `json:"age" validate:"gte=0,lte=130"`
}

規則是:

  • Name 必填
  • Email 必填,還要符合格式
  • Age 要介於 0 ~ 130

如果有人亂填,Echo 就會說:
「欸~不行啦!」
幫你擋掉不合理的資料。


多一點實用情境

  • 查資料:用 GET /users/:id → 「查 Jeff 的會員卡資料」。
  • 新增資料:用 POST /orders → 「新增一張訂單」。
  • 更新資料:用 PUT /orders/:id → 「修改 101 號訂單」。
  • 刪除資料:用 DELETE /orders/:id → 「取消 101 號訂單」。

這就是基本的 CRUD(新增、查詢、修改、刪除),任何網站都跑不掉。


今天的功課

  1. 寫幾個不同的路由:GET、POST、PUT、DELETE。
  2. 練習路徑參數:像 /items/:itemId。
  3. 測試查詢參數:用 ?key=value。
  4. 寫一個帶驗證規則的結構體,練習用 c.Bind() + c.Validate()。
  5. 試試看把路由群組拆乾淨,像菜單一樣分門別類。

結尾

今天學的東西就像一個專業速食店員:

  • 清楚聽懂點單(路由參數)
  • 知道去哪個廚房做餐(路由群組)
  • 擋掉奇怪的需求(請求驗證)

下次我們要更進階,聊聊 Middleware —— 這就像速食店的「隱藏規矩」。
例如「每個人點餐前都要先排隊」、「結帳一定要先付錢」,
讓整間店(網站)不會亂成一團。


上一篇
入門 Echo 框架:從 Hello, World 到優雅關閉
系列文
Golang x Echo 30 天:零基礎GO , 後端入門4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言